Applications developed for mobile devices are distributed in an application package containing the elements needed to run the application, such as the program code, resources, certificates and a manifest.
In some cases, it is desirable for an entity such as an application designer, application owner, or enterprise administrator to exercise control over the operation of an application. For example, it may be desirable to exercise control over what features or elements of a device or operating system that the application can access, what time of day those features or elements can be accessed, what security policies are applied to the application, etc.
To accomplish this, the program code of the application may be modified to include code that performs or links to monitoring and control functions. This modification is referred to as “application wrapping.” When an application is wrapped, a layer of code is added to the application binary file to add features or modify behavior of the application without making functional changes to the internal application code. The addition of wrapping code may reduce the risk to an enterprise of improper or unauthorized use of an application. For example, wrapping can add security and management features to an application before it is deployed to the enterprise. Moreover, wrapping can enable tracking of application feature usage and reporting of related metrics and problems. However, the wrapping can negatively affect performance of the application due to overhead associated with execution of the wrapper code, and the wrapped application requires more storage memory than the non-wrapped application.